home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cug106 / bioslb.mac < prev    next >
Text File  |  1984-06-14  |  7KB  |  203 lines

  1.     TITLE    BIOSLB Routine to interface 'C' to 'BIOS'
  2.     ;
  3.     ;
  4.     ;    Anyone may use this (or not as they please)
  5.     ;    for whatever purpose they wish
  6.     ;    H.R.Moran Jr. 1/31/80
  7.     ;
  8.     ;++ **************************************************
  9.     ;
  10.     ; TO USE THIS ROUTINE:
  11.     ;
  12.     ;    M80 BIOSLB,BIOSLB=BIOSLB    ...Microsoft 'M80'
  13.     ;    L80 BIOSYB,BIOSLB/N/E        ...Microsoft 'L80'
  14.     ;    REN BIOS.CRL=BIOS.COM
  15.     ;
  16.     ;    BIOS.CRL WILL BE A 'BDS C' COMPATIBLE RELOCATABLE FILE
  17.     ;    WHICH CAN BE REQUESTED AT CLINK OR INTEGRATED
  18.     ;    INTO YOUR LIBRARY WITH CLIB
  19.     ;
  20.     ;    'BDS C' calling sequence samples
  21.     ;
  22.     ;#define WARMBOOT 0
  23.     ;#define CONST 1
  24.     ;#define CONIN 2
  25.     ;#define CONOUT 3
  26.     ;#define LIST 4
  27.     ;#define PUNCH 5
  28.     ;#define READER 6
  29.     ;#define HOME 7
  30.     ;#define SELECT_DISK 8
  31.     ;#define SET_TRACK 9
  32.     ;#define SET_SECTOR 10
  33.     ;#define SET_DMA 11
  34.     ;#define READ_SECTOR 12
  35.     ;#define WRITE_SECTOR 13
  36.     ;
  37.     ;
  38.     ;char *dma_address;
  39.     ;char c;
  40.     ;int bios();  /* both B and C regs are loaded from 2'nd param */
  41.     ;          /*            A reg  is  returned as fn value */
  42.     ;int track,sector;
  43.     ;    .
  44.     ;    .
  45.     ;    .
  46.     ;  bios(SELECT_DISK,disk-'A');
  47.     ;  bios(SET_TRACK,track);
  48.     ;  bios(SET_SECTOR,sector);
  49.     ;  bios(SET_DMA,dma_address);
  50.     ;
  51.     ;
  52.     ;    if( (c=bios(READ_SECTOR,DUMMY_ARGUMENT)) != 0 )
  53.     ;      exit(puts("\nError in reading absolute sector"));
  54.     ;    .
  55.     ;    .
  56.     ;    .
  57.     ;
  58.     ;    while(1) {
  59.     ;      if( (c=bios(CONST,DUMMY_PARAMETER) )    /* keystruck */
  60.     ;        break;
  61.     ;      .
  62.     ;      .
  63.     ;      .
  64.     ;      } /* end while */
  65.     ;    c = bios(CONIN,DUMMY_PARAMETER);    /* get the char */
  66.     ;    if( c >= ' ' )                /* it is visable */
  67.     ;      bios(CONOUT,c);
  68.     ;    else {            /* make it visable */
  69.     ;      bios(CONOUT,'^');
  70.     ;      bios(CONOUT,c +'A');
  71.     ;      }
  72.     ;
  73.     ;
  74.     ;
  75.     ;-- **************************************************
  76.     ;
  77. MAGIC    EQU    3F7H        ;'BDS C' PARAMETER PASSING BUFFER
  78.     ;
  79.     ASEG
  80.     ORG    100H
  81.     .PHASE    0
  82.     ;
  83. ZERO:    DC    'BIOS'        ;MODULE NAME
  84.     DW    BIOSHEAD    ;LOCATION OF LABEL 'BIOSHEAD' IN FILE
  85.     DB    80H        ;END OF DIRECTORY ENTRIES
  86.     DW    FINIS - 100H    ;POINTER TO NEXT AVAIL LOCATION IN FILE
  87.     DS    (512 -($-ZERO))    ;PAD REST OF DIRECTORY
  88.     DS    5        ;RESERVED FOR 'CLIB'
  89.     ;
  90.     .DEPHASE
  91.     ;
  92.     PAGE
  93.     ;
  94.     ; THE BIOS() CODE HEADER ENTRY
  95.     ;
  96.     .PHASE    $-100H
  97.     ;
  98. BIOSHEAD:
  99.     DB    0        ;NO EXTERNAL 'BDS C' ROUTINES NEEDED
  100.     DW    BIOSSTOP-BIOS    ;LENGTH OF THIS ROUTINE
  101.     ;
  102.     .DEPHASE
  103.     ;
  104.     ; THE BODY OF BIOS()
  105.     ;
  106.     .PHASE    0
  107.     ;
  108. BIOS:    PUSH    B        ;SAVE TH 'BDS C' STACK POINTER
  109.     LXI    H,BIOSBACK    ;INTERMEDIATE RETURN ADRESS
  110.     PUSH    H        ;STACK IT
  111.     LHLD    MAGIC + 2    ;HL = PARAMETER TO PASS TO BIOS
  112.     MOV    B,H
  113.     MOV    C,L        ;BC = PARAMETER TO PASS TO BIOS
  114.     LDA    MAGIC        ; A = FUNCTION NUMBER
  115.     MOV    D,A
  116.     ADD    A
  117.     ADD    D        ; A = (FUNCTION NUMBER)*3
  118.     LHLD    1        ; HL = .(BIOS JUMP TABLE)
  119.     ADD    L
  120.     MOV    L,A
  121.     ADC    H
  122.     SUB    L
  123.     MOV    H,A        ; HL = (BIOS JUMP TABLE)[FUNCTION NUMBER]
  124.     PCHL            ; GO TO BIOS ROUTINE, RETURN TO 'BIOSBACK'
  125.     ;
  126. BIOSBACK:
  127.     MVI    H,0
  128.     MOV    L,A
  129.     POP    B        ;RESTORE THE 'BDS C' STACK POINTER
  130.     RET            ;TO THE 'BDS C' ROUTINE WHICH INVOKED 'BIOS'
  131.     ;
  132. BIOSSTOP:
  133.     ;
  134.     ; RELOCATION PARAMETERS
  135.     ;
  136.     DW    1            ;NUMBER OF NEEDED RELOCATION PARAMS
  137.     DW    BIOS + 2        ;POINTER TO ADDRESS NEEDING RELOC
  138.     .DEPHASE
  139. FINIS:    END    ZERO
  140. iskette for drive B:
  141. and strike any key when ready$Press any key to begin formatting B: $System transferred
  142. $Format another (Y/N)?$
  143. $Invalid characters in volume label
  144. $Invalid drive specification$Invalid parameter$Insert DOS disk in drive x:
  145. and strike any key when ready$Format failure
  146.  
  147. $Disk unsuitable for system disk
  148. $Track 0 bad - disk unusable
  149. $Insufficient memory for BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    1
  150.  
  151.  
  152.     1                                        TITLE    BIOSLB Routine to interface 'C' to 'BIOS'
  153.     2                                        ;
  154.     3                                        ;
  155.     4                                        ;    Anyone may use this (or not as they please)
  156.     5                                        ;    for whatever purpose they wish
  157.     6                                        ;    H.R.Moran Jr. 1/31/80
  158.     7                                        ;
  159.     8                                        ;++ **************************************************
  160.     9                                        ;
  161.    10                                        ; TO USE THIS ROUTINE:
  162.    11                                        ;
  163.    12                                        ;    M80 BIOSLB,BIOSLB=BIOSLB    ...Microsoft 'M80'
  164.    13                                        ;    L80 BIOSYB,BIOSLB/N/E        ...Microsoft 'L80'
  165.    14                                        ;    REN BIOS.CRL=BIOS.COM
  166.    15                                        ;
  167.    16                                        ;    BIOS.CRL WILL BE A 'BDS C' COMPATIBLE RELOCATABLE FILE
  168.    17                                        ;    WHICH CAN BE REQUESTED AT CLINK OR INTEGRATED
  169.    18                                        ;    INTO YOUR LIBRARY WITH CLIB
  170.    19                                        ;
  171.    20                                        ;    'BDS C' calling sequence samples
  172.    21                                        ;
  173.    22                                        ;#define WARMBOOT 0
  174.    23                                        ;#define CONST 1
  175.    24                                        ;#define CONIN 2
  176.    25                                        ;#define CONOUT 3
  177.    26                                        ;#define LIST 4
  178.    27                                        ;#define PUNCH 5
  179.    28                                        ;#define READER 6
  180.    29                                        ;#define HOME 7
  181.    30                                        ;#define SELECT_DISK 8
  182.    31                                        ;#define SET_TRACK 9
  183.    32                                        ;#define SET_SECTOR 10
  184.    33                                        ;#define SET_DMA 11
  185.    34                                        ;#define READ_SECTOR 12
  186.    35                                        ;#define WRITE_SECTOR 13
  187.    36                                        ;
  188.    37                                        ;
  189.    38                                        ;char *dma_address;
  190.    39                                        ;char c;
  191.    40                                        ;int bios();  /* both B and C regs are loaded from 2'nd param */
  192.    41                                        ;          /*            A reg  is  returned as fn value */
  193.    42                                        ;int track,sector;
  194.    43                                        ;    .
  195.    44                                        ;    .
  196.    45                                        ;    .
  197.    46                                        ;  bios(SELECT_DISK,disk-'A');
  198. BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    1-1
  199.  
  200.  
  201.    47                                        ;  bios(SET_TRACK,track);
  202.    48                                        ;  bios(SET_SECTOR,sector);
  203.    49                                        ;  bio